package com.ic.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * Description: 本类用于处理String
 * Author: zen_hu
 * Date  : 2017/1/10
 * Time  : 13:12
 */
public class StringUtil {
	/**
	 * 判断字符串非null且非空
	 *
	 * @param str 被验证字符串
	 * @return true/false
	 */
	public static boolean notNullAndNotBlank(String str) {
		return Objects.nonNull(str) && str.length() != 0;
	}


	/**
	 * 检查字符串数组内的元素是否存在null或空串
	 *
	 * @param strs 被验证字符串数组
	 * @return true/false
	 */
	public static boolean notNullAndNotBlank(String... strs) {
		for (String str : strs) {
			if (!notNullAndNotBlank(str))
				return false;
		}
		return true;
	}

	/**
	 * 基于uuid、登录账号和密码生成token字符串
	 *
	 * @param loginName 登录账号
	 * @param password  登录密码
	 * @return token信息
	 */
	public static String getTokenStr(String loginName, String password) {
		return CryptographyUtil.md5(KeyGenerateUtil.getInstance().getKey() + loginName + password);
	}

	/**
	 * 将String数组转换成List
	 *
	 * @param str 字符串数组
	 * @return 集合数组
	 */
	public static List generateList(String[] str) {
		if (str == null || str.length == 0)
			return new ArrayList();
		List<String> list = new ArrayList<>();
		Collections.addAll(list, str);
		return list;
	}

	/**
	 * 生成一个随机数
	 *
	 * @param num 随机数种子
	 * @return 随机数
	 */
	public static String generateNo(int num) {
		num = (num == 0) ? 1000 : num;
		return (new Integer((int) (num * (Math.random() + 1)))).toString();
	}

	/**
	 * 截取从字符串开始到最后一个标记处之前的内容
	 *
	 * @param source 原字符串
	 * @param tag    标记字符串
	 * @return String
	 */
	public static String subStringFromLastTag(String source, String tag) {
		if (notNullAndNotBlank(source)) {
			return source.substring(0, source.lastIndexOf(tag));
		}
		return "";
	}

	/**
	 * 根据访问路径获取URL：
	 * 源路径为：http://localhost:8000/IC/itemTypeController/showItemType
	 * 获取的路径为: http://localhost:8000/IC/
	 *
	 * @param sourceStr 源路径字符串
	 * @return 目标路径字符串
	 */
	public static String subStringStr(String sourceStr) {
//		String s = "http://localhost:8000/IC/itemTypeController/showItemType";
		String[] result = sourceStr.replace("//", "/").split("/");
		return result[0] + "//" + result[1] + "/" + result[2] + "/";
	}
}
